package com.tianji.api.config;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.tianji.api.cache.CategoryCache;
import com.tianji.api.client.course.CategoryClient;
import com.tianji.api.dto.course.CategoryBasicDTO;
import org.springframework.context.annotation.Bean;

import java.time.Duration;
import java.util.Map;

/**
 * 课程分类缓存配置类
 */
public class CategoryCacheConfig {

    /**
     * 课程分类的caffeine缓存
     * @return 返回一个Caffeine缓存实例，用于存储课程分类信息
     */
    @Bean
    public Cache<String, Map<Long, CategoryBasicDTO>> categoryCaches() {
        return Caffeine.newBuilder()
                .initialCapacity(1) // 设置初始容量为1
                .maximumSize(10_000) // 最大内存容量为10000
                .expireAfterWrite(Duration.ofMinutes(30)) // 有效期为30分钟
                .build();
    }

    /**
     * 课程分类的缓存工具类
     * @param categoryCaches 课程分类的Caffeine缓存实例
     * @param categoryClient 课程分类的客户端
     * @return 返回一个CategoryCache实例，用于操作课程分类缓存
     */
    @Bean
    public CategoryCache categoryCache(
            Cache<String, Map<Long, CategoryBasicDTO>> categoryCaches, CategoryClient categoryClient) {
        return new CategoryCache(categoryCaches, categoryClient);
    }
}
